package com.example.tomatotodo.api;

import com.example.tomatotodo.entity.ResultUser;
import com.example.tomatotodo.model.LoginDTO;
import com.example.tomatotodo.model.RegisterDTO;
import com.example.tomatotodo.model.Result;
import com.example.tomatotodo.model.TodoRecordSyncDTO;
import com.example.tomatotodo.model.TodoSettingDTO;
import com.example.tomatotodo.model.TodoSettingSyncDTO;
import com.example.tomatotodo.model.UserUpdateDTO;

import java.util.List;

import okhttp3.MultipartBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Headers;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;

public interface ApiService {
    @GET("/task/template/pull")
    Call<Result<List<TodoSettingDTO>>> pullTodoSettings(@Header("Authorization") String token);

    @POST("/task/template/push")
    @Headers({"Content-Type: application/json"})
    Call<Result<Void>> pushTodoSettings(
            @Header("Authorization") String token,
            @Body List<TodoSettingSyncDTO> settings
    );

    @POST("/record/upload")
    @Headers({"Content-Type: application/json"})
    Call<Result<Void>> uploadRecords(
            @Header("Authorization") String token,
            @Body List<TodoRecordSyncDTO> records
    );

    @POST("/user/login")
    Call<Result<String>> login(@Body LoginDTO loginDTO);
    @POST("/user/register")
    Call<Result<Long>> register(@Body RegisterDTO registerDTO);
    @GET("/user/profile")
    Call<ResultUser> getProfile(@Header("Authorization") String authorization);
    @PUT("/user/profile")
    Call<Result<Void>> updateProfile(
            @Header("Authorization") String token,
            @Body UserUpdateDTO updateDTO
    );
    /**
     * 上传用户头像
     * @param token JWT令牌（格式："Bearer {token}"）
     * @param file 图片文件
     * @return 包含头像路径的Result对象
     */
    @Multipart
    @POST("user/avatar")
    Call<Result<String>> uploadAvatar(
            @Header("Authorization") String token,
            @Part MultipartBody.Part file
    );

    /**
     * 获取用户头像
     * @param userId 用户ID
     * @return 头像图片二进制数据
     */
    /**
     * 获取用户头像（需携带Token）
     */
    @GET("user/avatar/{userId}")
    Call<ResponseBody> getAvatar(
            @Header("Authorization") String token, // 添加Token请求头
            @Path("userId") long userId
    );

    /**
     * 查询用户专注记录
     */
    @GET("record/query")
    Call<Result<List<TodoRecordSyncDTO>>> queryRecords(
            @Header("Authorization") String token,
            @Query("startDate") String startDate,
            @Query("endDate") String endDate
    );

}
